package com.acceptable.qucun.generic.util.result.error;

import java.util.HashMap;
import java.util.Map;

public enum  FileErrorResult implements BaseErrorResult {
    // 400XXX 文件功能错误代码 首位为4 6位
    // 功能错误笼统描述
    UPLOAD_ERROR("400100", "上传该文件的过程中出现错误。"),
    DOWNLOAD_ERROR("400110", "文件下载过程中出现错误。"),

    MOVE_ERROR("400120", "文件移动的过程中出现错误。"),
    COPY_ERROR("400130", "文件复制的过程中出现错误。"),

    RENAME_ERROR("400140", "文件（夹）重命名失败，请检查文件名。\n 新的文件名不能包含 \\/ : * ? \" < > | "),

    CREATE_FOLDER_ERROR("400150", "新文件夹创建失败，请联系管理员。"),
    LOGICAL_DELETE_ERROR("400160", "部分文件逻辑删除失败，请检查文件是否存在。"),
    PHYSICAL_DELETE_ERROR("400170", "文件物理删除的过程中出现错误。"),
    LOGICAL_RECOVERY_ERROR("400180", "被选中的回收站的文件还原过程出现错误。"),
    FILTER_ERROR("400190", "文件筛选过程中出现错误。"),
    SHARE_UPDATE_ERROR("400101", "分享信息修改过程中出现错误。"),

    // 文件上传相关
    CHUNK_LACK_ERROR("400200", "缺失部分文件数据，请重新上传文件。"),

    // 文件创建相关
    PHYSICAL_CREATE_ERROR("400300", "文件物理创建的过程中出现错误。"),
    REST_VOLUME_ERROR("400400", "剩余空间不足，请尝试扩容或删除部分文件。"),
    CREATE_FILE_ERROR("400500", "新文件创建失败，请检查剩余空间或联系管理员。"),

    // 文件查询相关
    DEST_DICT_NOT_EXIST_ERROR("400600", "目标文件夹不存在，请先创建文件夹。"),
    TMP_DICT_NOT_EXIST_ERROR("400650", "缓存文件夹不存在，请联系管理员。"),
    SET_INFO_ERROR("400700", "文件相关信息设置失败。"),
    NOT_EXIST_ERROR("400800", "文件不存在。"),

    // 文件下载相关
    COMPRESS_ERROR("400900", "文件或目录压缩过程中出现错误。"),

    // 文件分享
    SHARE_NOT_EXIST_ERROR("401000", "该分享链接不存在或已经过期。"),
    SHARE_PASSWORD_ERROR("401100", "分享密码不正确，请纠正后重试。"),
    SHARE_USER_ERROR("401200", "不能获取自己分享的文件哦！如有需要请进行复制操作。");

    private String code;
    private String msg;
    private static Map<String, FileErrorResult> resultMap;

    FileErrorResult(String code, String msg){
        this.code = code;
        this.msg = msg;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getMsg() {
        return msg;
    }

    private static void createMap(){
        if(resultMap == null){
            resultMap = new HashMap<>();

            // 功能错误笼统描述
            {
                resultMap.put(UPLOAD_ERROR.code, UPLOAD_ERROR);
                resultMap.put(DOWNLOAD_ERROR.code, DOWNLOAD_ERROR);

                resultMap.put(MOVE_ERROR.code, MOVE_ERROR);
                resultMap.put(COPY_ERROR.code, COPY_ERROR);

                resultMap.put(RENAME_ERROR.code, RENAME_ERROR);
                resultMap.put(FILTER_ERROR.code, FILTER_ERROR);

                resultMap.put(CREATE_FOLDER_ERROR.code, CREATE_FOLDER_ERROR);
                resultMap.put(LOGICAL_RECOVERY_ERROR.code, LOGICAL_RECOVERY_ERROR);
                resultMap.put(LOGICAL_DELETE_ERROR.code, LOGICAL_DELETE_ERROR);
                resultMap.put(PHYSICAL_DELETE_ERROR.code, PHYSICAL_DELETE_ERROR);
                resultMap.put(SHARE_UPDATE_ERROR.code, SHARE_UPDATE_ERROR);
            }

            // 文件上传相关
            {
                resultMap.put(CHUNK_LACK_ERROR.code, CHUNK_LACK_ERROR);
            }

            // 文件创建相关
            {
                resultMap.put(REST_VOLUME_ERROR.code, REST_VOLUME_ERROR);
                resultMap.put(CREATE_FILE_ERROR.code, CREATE_FILE_ERROR);
                resultMap.put(PHYSICAL_CREATE_ERROR.code, PHYSICAL_CREATE_ERROR);
            }

            // 文件查询相关
            {
                resultMap.put(DEST_DICT_NOT_EXIST_ERROR.code, DEST_DICT_NOT_EXIST_ERROR);
                resultMap.put(TMP_DICT_NOT_EXIST_ERROR.code, TMP_DICT_NOT_EXIST_ERROR);
                resultMap.put(SET_INFO_ERROR.code, SET_INFO_ERROR);
                resultMap.put(NOT_EXIST_ERROR.code, NOT_EXIST_ERROR);
            }

            // 文件下载相关
            {
                resultMap.put(COMPRESS_ERROR.code, COMPRESS_ERROR);
            }

            // 文件分享
            {
                resultMap.put(SHARE_NOT_EXIST_ERROR.code, SHARE_NOT_EXIST_ERROR);
                resultMap.put(SHARE_PASSWORD_ERROR.code, SHARE_PASSWORD_ERROR);
                resultMap.put(SHARE_USER_ERROR.code, SHARE_USER_ERROR);
            }
        }

    }

    public static FileErrorResult getErrorResultByCode(String errorCode){
        createMap();
        return resultMap.get(errorCode);
    }

    public static Map<String, FileErrorResult> getResultMap(){
        createMap();
        return resultMap;
    }
}
